package com.micro.ai.files.service;

import org.springframework.core.io.Resource;
import org.springframework.web.multipart.MultipartFile;

import java.io.InputStream;

/**
 * 存储服务接口
 * 支持多种存储提供商（MinIO、S3、OSS等）
 * 
 * @author micro-ai
 * @since 0.0.1
 */
public interface StorageService {

    /**
     * 上传文件
     * 
     * @param file 文件
     * @param objectName 对象名称（路径）
     * @return 文件访问URL
     */
    String uploadFile(MultipartFile file, String objectName);

    /**
     * 上传文件流
     * 
     * @param inputStream 输入流
     * @param objectName 对象名称（路径）
     * @param contentType 内容类型
     * @param size 文件大小
     * @return 文件访问URL
     */
    String uploadFile(InputStream inputStream, String objectName, String contentType, long size);

    /**
     * 下载文件
     * 
     * @param objectName 对象名称（路径）
     * @return 文件资源
     */
    Resource downloadFile(String objectName);

    /**
     * 获取文件输入流
     * 
     * @param objectName 对象名称（路径）
     * @return 输入流
     */
    InputStream getFileInputStream(String objectName);

    /**
     * 删除文件
     * 
     * @param objectName 对象名称（路径）
     * @return 是否成功
     */
    boolean deleteFile(String objectName);

    /**
     * 检查文件是否存在
     * 
     * @param objectName 对象名称（路径）
     * @return 是否存在
     */
    boolean fileExists(String objectName);

    /**
     * 获取文件访问URL（预签名URL）
     * 
     * @param objectName 对象名称（路径）
     * @param expirySeconds 过期时间（秒）
     * @return 访问URL
     */
    String getFileUrl(String objectName, int expirySeconds);

    /**
     * 获取文件访问URL（永久URL，如果配置了CDN）
     * 
     * @param objectName 对象名称（路径）
     * @return 访问URL
     */
    String getFileUrl(String objectName);
}

